package com.hyt.it.ogt.kq.service.gov.model.vo;

import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.time.LocalDateTime;

/**
 * <p>
 * 考试任务表
 * </p>
 *
 * @author chengxh
 * @since 2021-03-08
 */
@Data
@Accessors(chain = true)
public class TaskInfoVO implements Serializable {

    // 前端没时间开发，暂由后端校验，建议后续改为使用注解方式做参数校验，减少代码复杂度

    private static final long serialVersionUID = 1L;

    private String id;

    //@Pattern(regexp = "^[\\u4E00-\\u9FA5\\w\\-]{1,20}$", message = "考试任务名称只能包含中文字符、英文字符、数字、下划线和中横线，1~20个字")
    @NotBlank(message = "考试任务名称不能为空")
    @ApiModelProperty(value = "考试任务名称(前端必传)(考试任务名称只能包含中文字符、英文字符、数字、下划线和中横线，1~20个字)")
    private String name;

    @ApiModelProperty(value = "考试任务名称(前端必传)")
    private String code;

    @NotNull(message = "考试开始时间不能为空")
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
    @ApiModelProperty(value = "考试开始时间(前端必传)")
    private LocalDateTime beginDate;

    @NotNull(message = "考试结束时间不能为空")
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
    @ApiModelProperty(value = "考试结束时间(前端必传)")
    private LocalDateTime endDate;

    @NotBlank(message = "考试形式不能为空")
    @ApiModelProperty(value = "考试形式，1：线上机考，2：线下机考(前端必传)")
    private String examType;

    @NotBlank(message = "考试分类不能为空")
    @ApiModelProperty(value = "考试分类(前端必传)")
    private String testClassify;

    @ApiModelProperty(value = "数据锁定，false：未锁定，true：已锁定")
    private Boolean dataLock;

    @ApiModelProperty(value = "任务发布状态，false：未发布，true：已发布")
    private Boolean publishStatus;

    @ApiModelProperty(value = "报名任务ID")
    private String taskBmId;

    @ApiModelProperty(value = "当前任务是否已编排")
    private Boolean hasArranged;

    @ApiModelProperty(value = "监考员是否已编排")
    private Boolean hasProctorArranged;

    @ApiModelProperty(value = "监考员数据锁定，false：未锁定，true：已锁定")
    private Boolean proctorDataLock;

    @NotNull(message = "考试性质不能为空")
    @ApiModelProperty(value = "考试性质", notes = "1 -正式考试、2-仿真考试、3-模拟考试、4-补考")
    private Integer taskQualities;

    @ApiModelProperty(value = "编排方式", notes = "1-虚拟考场编排、2-实体考场编排、3-自定义编排")
    private Integer composeWay;

    @NotNull(message = "考生来源不能为空")
    @ApiModelProperty(value = "数据来源", notes = "0-无来源 1-报名绑定、2-内部导入、3-外部导入")
    private Integer dataSource;

    @ApiModelProperty("监考员编排方式，1-自动编排，0-手动编排，默认值0")
    private Integer proctorArrangeType;

    @ApiModelProperty("监考员编排时间")
    private LocalDateTime proctorArrangeDate;

    @ApiModelProperty("考生编排时间")
    private LocalDateTime arrangeDate;
}
